package com.kproduce.roundcorners;

import com.kproduce.roundcorners.util.RoundHelper;
import com.kproduce.roundcorners.util.RoundMethodInterface;
import ohos.agp.colors.RgbColor;
import ohos.agp.components.AttrSet;
import ohos.agp.components.Button;
import ohos.agp.components.element.ShapeElement;
import ohos.agp.utils.Color;
import ohos.app.Context;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;

/**
 * @author kuanggang on 2019/12/10
 */
public class RoundButton extends Button implements RoundMethodInterface {

    private static HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, 0x000110, "RoundButton");

    private RoundHelper mHelper = new RoundHelper();

    /**
     * 默认构造函数，用于使用默认属性集和样式创建按钮
     *
     * @param context 应用程序上下文
     */
    public RoundButton(Context context) {
        super(context);
    }

    /**
     * 用于在解析XML文件后使用指定的属性集和默认样式创建按钮的构造函数。
     *
     * @param context 应用程序上下文
     * @param attrSet 要使用的属性集
     */
    public RoundButton(Context context, AttrSet attrSet) {
        this(context, attrSet, "-1");
        ShapeElement shapeElement = (ShapeElement) this.getBackgroundElement();

        /*
            设置每个角的半径，这个方法仅对矩形有效
            表示四个角的半径数组。如果数组的长度不等于8，则该设置无效。
            每对半径表示一个角的x轴半径和y轴半径。
         */
        shapeElement.setCornerRadiiArray(new float[]{50, 50, 80, 80, 80, 80, 50, 50});
        this.setBackground(shapeElement);

        ShapeElement forGround = new ShapeElement();
        forGround.setCornerRadiiArray(new float[]{45, 45, 75, 75, 75, 75, 45, 45});
        forGround.setStroke(10, RgbColor.fromArgbInt(Color.GREEN.getValue()));
        this.setForeground(forGround);
    }

    /**
     * 用于在解析XML文件后使用指定的属性集和指定的样式创建按钮的构造函数。
     *
     * @param context   应用程序上下文
     * @param attrSet   要使用的属性集
     * @param styleName 要使用的样式名称
     */
    public RoundButton(Context context, AttrSet attrSet, String styleName) {
        super(context, attrSet, styleName);
    }

    @Override
    public void invalidate() {

    }

    /**
     * 改变颜色
     *
     * @param color
     */
    public void changeColor(Color color) {
        invalidate();
    }

    @Override
    public void setRadius(float radiusDp) {
        mHelper.setRadius(radiusDp);
    }

    @Override
    public void setRadius(float radiusTopLeftDp, float radiusTopRightDp, float radiusBottomLeftDp, float radiusBottomRightDp) {
        mHelper.setRadius(radiusTopLeftDp, radiusTopRightDp, radiusBottomLeftDp, radiusBottomRightDp);
    }

    @Override
    public void setRadiusLeft(float radiusDp) {
        mHelper.setRadiusLeft(radiusDp);
    }

    @Override
    public void setRadiusRight(float radiusDp) {
        mHelper.setRadiusRight(radiusDp);
    }

    @Override
    public void setRadiusTop(float radiusDp) {
        mHelper.setRadiusTop(radiusDp);
    }

    @Override
    public void setRadiusBottom(float radiusDp) {
        mHelper.setRadiusBottom(radiusDp);
    }

    @Override
    public void setRadiusTopLeft(float radiusDp) {
        mHelper.setRadiusTopLeft(radiusDp);
    }

    @Override
    public void setRadiusTopRight(float radiusDp) {
        mHelper.setRadiusTopRight(radiusDp);
    }

    @Override
    public void setRadiusBottomLeft(float radiusDp) {
        mHelper.setRadiusBottomLeft(radiusDp);
    }

    @Override
    public void setRadiusBottomRight(float radiusDp) {
        mHelper.setRadiusBottomRight(radiusDp);
    }

    @Override
    public void setStrokeWidth(float widthDp) {
        mHelper.setStrokeWidth(widthDp);
    }

    @Override
    public void setStrokeColor(int color) {
        mHelper.setStrokeColor(color);
    }

    @Override
    public void setStrokeWidthColor(float widthDp, int color) {
        mHelper.setStrokeWidthColor(widthDp, color);
    }
}
